WebSocket
使用net
库的 WebSocket
服务端
server.go
package main
import
(
"fmt"
"log"
"github.com/labstack/echo"
"github.com/labstack/echo/middleware"
"golang.org/x
et/websocket"
)
func hello(c echo.Context) error{
websocket.Handler( func(ws *websocket.Conn){
defer ws.Close()
for{
// Write
err := websocket.Message.Send(ws,"Hello, Client!")
if err != nil{
log.Fatal(err)
}
// Read
msg :=""
err = websocket.Message.Receive(ws,&msg)
if err != nil{
log.Fatal(err)
}
fmt.Printf("%s\n", msg)
}
}).ServeHTTP(c.Response(), c.Request())
return nil
}
func main(){
e := echo.New()
e.Use(middleware.Logger())
e.Use(middleware.Recover())
e.Static("/","../public")
e.GET("/ws", hello)
e.Logger.Fatal(e.Start(":1323"))
}
使用gorilla
的 WebSocket
服务端
server.go
package main
import
(
"fmt"
"log"
"github.com/labstack/echo"
"github.com/gorilla/websocket"
"github.com/labstack/echo/middleware"
)
var
(
upgrader = websocket.Upgrader{}
)
func hell(c echo.Context) error{
ws, err := upgrader.Upgrade(c.Response(), c.Request(),nil)
if err !=nil{
return err
}
defer ws.Close()
for{
// Write
err := ws.WriteMessage(websocket.TextMessage,[]byte("Hello, Client!"))
if err != nil{
log.Fatal(err)
}
// Read
_, msg, err := ws.ReadMessage()
if err !=nil{
log.Fatal(err)
}
fmt.Printf("%s\n", msg)
}
}
func main(){
e := echo.New()
e.Use(middleware.Logger())
e.Use(middleware.Recover())
e.Static("/", "../public")
e.GET("/ws", hello)
e.Logger.Fatal(e.Start(":1323"))
}
客户端
index.html
<!doctypehtml>
<html lang ="en">
<head>
<meta charset ="utf-8">
<title>WebSocket</title>
</head>
<body>
<p id ="output"></p>
<script>
var loc = window.location;
var uri ='ws:';
if(loc.protocol ==='https:')
{
uri ='wss:';
}
uri +='//'+ loc.host;
uri += loc.pathname +'ws';
ws =new WebSocket(uri)
ws.onopen = function()
{
console.log('Connected')
}
ws.onmessage = function(evt){
var out = document.getElementById('output');
out.innerHTML += evt.data +'<br>';
}
setInterval(function(){
ws.send('Hello, Server!');
}, 1000
);
</script>
</body>
</html>
输出示例
Client
Hello, Client
!
Hello, Client
!
Hello, Client
!
Hello, Client
!
Hello, Client
!
Server
Hello, Server
!
Hello, Server
!
Hello, Server
!
Hello, Server
!
Hello, Server
!